package org.acervus.acervo;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import org.acervus.conexao.ConnMySQL;

/**
 * @author Eziel Soares, Giordano Giuliano, Lenilson Regis
 */
public class AcervoController {

    PreparedStatement pstm;
    ResultSet rs;
    String buscarAcervo = "SELECT * FROM acervo WHERE titulo LIKE ?";
    
    String cadastrarLivro = "INSERT INTO acervo (titulo, autor, tipo, ano, editora, edicao, isbn, unidades)"
                            + " VALUES(?,?,?,?,?,?,?,?)";
    String cadastrarRevista = "INSERT INTO acervo (titulo, tipo, ano, numero, lancamento, editora, edicao, unidades)"
                            + " VALUES(?,?,?,?,?,?,?,?)";
    String cadastrarArtigo = "INSERT INTO acervo (titulo, autor, tipo, ano, instituicao, unidades)"
                            + " VALUES(?,?,?,?,?,?)";
    
    String alterarLivro = "UPDATE acervo SET titulo = ?, autor = ?, tipo = ?, ano = ?, editora = ?,"
                            + " edicao = ?, isbn = ?, unidades = ? WHERE id = ?";
    String alterarRevista = "UPDATE acervo SET titulo = ?, tipo = ?, ano = ?, numero = ?, lancamento = ?,"
                            + "editora = ?, edicao = ?, unidades = ? WHERE id = ?";
    String alterarArtigo = "UPDATE acervo SET titulo = ?, autor = ?, tipo = ?, ano = ?, instituicao = ?, "
                            + "unidades = ? WHERE id = ?";
    
    String removerAcervo = "DELETE FROM acervo WHERE id = ?";
    
    String retornaAcervo = "SELECT * FROM acervo WHERE id = ?";

    public AcervoController() {
    }

    public void alterarAcervo(AcervoBean acervo, String tipo) {
        try {
            ConnMySQL acervusbd = new ConnMySQL();
            
            if(tipo.equals("livro")){
                pstm = acervusbd.doConnect().prepareStatement(alterarLivro);
                pstm.setString(1, acervo.getTitulo());
                pstm.setString(2, acervo.getAutor());
                pstm.setInt(3, 1);
                pstm.setString(4, acervo.getAno());
                pstm.setString(5, acervo.getEditora());
                pstm.setInt(6, acervo.getEdicao());
                pstm.setString(7, acervo.getIsbn());
                pstm.setInt(8, acervo.getUnidades());
                pstm.setInt(9, acervo.getId());
            }
            
            if(tipo.equals("revista")){
                pstm = acervusbd.doConnect().prepareStatement(alterarRevista);
                pstm.setString(1, acervo.getTitulo());
                pstm.setInt(2, 2);
                pstm.setString(3, acervo.getAno());
                pstm.setInt(4, acervo.getNumero());
                pstm.setString(5, acervo.getLancamento());
                pstm.setString(6, acervo.getEditora());
                pstm.setInt(7, acervo.getEdicao());
                pstm.setInt(8, acervo.getUnidades());
                pstm.setInt(9, acervo.getId());
            }
            
            if(tipo.equals("artigo")){
                pstm = acervusbd.doConnect().prepareStatement(alterarArtigo);
                pstm.setString(1, acervo.getTitulo());
                pstm.setString(2, acervo.getAutor());
                pstm.setInt(3, 3);
                pstm.setString(4, acervo.getAno());
                pstm.setString(5, acervo.getInstituicao());
                pstm.setInt(6, acervo.getUnidades());
                pstm.setInt(7, acervo.getId());
            }
            
            pstm.executeUpdate();
            acervusbd.doDesconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void cadastrarAcervo(AcervoBean acervo, String tipo) {
        try {
            ConnMySQL acervusbd = new ConnMySQL();

            if(tipo.equals("livro")){
                pstm = acervusbd.doConnect().prepareStatement(cadastrarLivro);
                pstm.setString(1, acervo.getTitulo());
                pstm.setString(2, acervo.getAutor());
                pstm.setInt(3, 1);
                pstm.setString(4, acervo.getAno());
                pstm.setString(5, acervo.getEditora());
                pstm.setInt(6, acervo.getEdicao());
                pstm.setString(7, acervo.getIsbn());
                pstm.setInt(8, acervo.getUnidades());
            }
            
            if(tipo.equals("revista")){
                pstm = acervusbd.doConnect().prepareStatement(cadastrarRevista);
                pstm.setString(1, acervo.getTitulo());
                pstm.setInt(2, 2);
                pstm.setString(3, acervo.getAno());
                pstm.setInt(4, acervo.getNumero());
                pstm.setString(5, acervo.getLancamento());
                pstm.setString(6, acervo.getEditora());
                pstm.setInt(7, acervo.getEdicao());
                pstm.setInt(8, acervo.getUnidades());
            }
            
            if(tipo.equals("artigo")){
                pstm = acervusbd.doConnect().prepareStatement(cadastrarArtigo);
                pstm.setString(1, acervo.getTitulo());
                pstm.setString(2, acervo.getAutor());
                pstm.setInt(3, 3);
                pstm.setString(4, acervo.getAno());
                pstm.setString(5, acervo.getInstituicao());
                pstm.setInt(6, acervo.getUnidades());
            }
            
            pstm.executeUpdate();
            acervusbd.doDesconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    
    public void removerAcervo(AcervoBean acervo) {
        try {
            ConnMySQL acervusbd = new ConnMySQL();
            pstm = acervusbd.doConnect().prepareStatement(removerAcervo);
            pstm.setInt(1, acervo.getId());
            pstm.executeUpdate();
            acervusbd.doDesconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List<AcervoBean> listarAcervo(String titulo) {
        List<AcervoBean> acervo = new ArrayList();
        try {
            ConnMySQL acervusbd = new ConnMySQL();
            pstm = (PreparedStatement) acervusbd.doConnect().prepareStatement(buscarAcervo);
            pstm.setString(1, titulo); //"SELECT * FROM TITULO WHERE NOME LIKE java
            rs = pstm.executeQuery();
            AcervoBean ace;
            while (rs.next()) {
                ace = new AcervoBean();
                ace.setId(rs.getInt("id"));
                ace.setTitulo(rs.getString("titulo"));
                ace.setAutor(rs.getString("autor"));
                ace.setTipo(rs.getString("tipo"));
                ace.setAno(rs.getString("ano"));
                ace.setInstituicao(rs.getString("instituicao"));
                ace.setNumero(rs.getInt("numero"));
                ace.setLancamento(rs.getString("lancamento"));
                ace.setEditora(rs.getString("editora"));
                ace.setEdicao(rs.getInt("edicao"));
                ace.setIsbn(rs.getString("isbn"));
                ace.setUnidades(rs.getInt("unidades"));
                acervo.add(ace);

            }
            acervusbd.doDesconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return acervo;
    }
    
    public AcervoBean retornaAcervo(int id) {
        AcervoBean itemAcervo = new AcervoBean();
        
        try {
            ConnMySQL acervusbd = new ConnMySQL();
            pstm = (PreparedStatement) acervusbd.doConnect().prepareStatement(retornaAcervo);
            pstm.setInt(1, id); 
            rs = pstm.executeQuery();
            
            while (rs.next()) {
                itemAcervo = new AcervoBean();
                itemAcervo.setId(rs.getInt("id"));
                itemAcervo.setTitulo(rs.getString("titulo"));
                itemAcervo.setAutor(rs.getString("autor"));
                itemAcervo.setTipo(rs.getString("tipo"));
                itemAcervo.setAno(rs.getString("ano"));
                itemAcervo.setInstituicao(rs.getString("instituicao"));
                itemAcervo.setNumero(rs.getInt("numero"));
                itemAcervo.setLancamento(rs.getString("lancamento"));
                itemAcervo.setEditora(rs.getString("editora"));
                itemAcervo.setEdicao(rs.getInt("edicao"));
                itemAcervo.setIsbn(rs.getString("isbn"));
                itemAcervo.setUnidades(rs.getInt("unidades"));
            }
            acervusbd.doDesconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return itemAcervo;
    }
}